<?php
namespace app\api\model;

use app\common\model\project_model\AlbumImgModel as AlbumImg;

use think\Db;
use think\Exception;

class AlbumImgModel extends AlbumImg {

    public static $error_msg = '';

    public static function addImg($album_id, $img_arr) {
        Db::startTrans();
        try {
            $imgM = new self();
            // 新增图片
            $data = self::formatData($album_id, $img_arr);
            $firstImg = $data[0]['img_url'];// 第一张图片
            $res = $imgM->saveAll($data);
            if (!$res) {
                throw new Exception('添加图片失败:' . $imgM->getError());
            }
            // 更新相册封面图
            if (!$albumM = AlbumModel::updateThumb($album_id, $firstImg)) {
                throw new Exception(AlbumImgModel::$error_msg);
            }
            Db::commit();
            return true;
        }catch(\Exception $e) {
            self::$error_msg = $e->getMessage();
            Db::rollback();
            return false;
        }
    }

    /**
     * 格式化数据
     *
     * @param $album_id
     * @param $img_arr
     * @return array
     */
    private static function formatData($album_id, $img_arr, $sort = 0) {
        $data = [];
        foreach ($img_arr as $key => $img) {
            $sort += 1;
            $data[$key]['album_id'] = $album_id;
            $data[$key]['img_url'] = $img;
            $data[$key]['created_time'] = date('Y-m-d H:i:s', time());
            $data[$key]['updated_time'] = date('Y-m-d H:i:s', time());
            $data[$key]['sort'] = $sort;
        }
        return $data;
    }

    /**
     * 相册更新
     * @param $album_id
     * @param $img_arr
     * @return bool
     */
    public static function up($album_id, $img_arr){
        Db::startTrans();
        try {
            $imgM = new self();
            // 删除已有的图片
            if (($imgM->where(['album_id' => $album_id])->delete()) === false) {
                throw new Exception('删除原有图片失败');
            }
            // 新增图片
            $data = self::formatData($album_id, $img_arr);
            $firstImg = $data[0]['img_url'];// 第一张图片
            $res = $imgM->saveAll($data);
            //var_dump($res);die;
            if (!$res) {
                throw new Exception('添加图片失败:' . $imgM->getError());
            }
            // 更新相册封面图
            if (!$albumM = AlbumModel::updateThumb($album_id, $firstImg)) {
                throw new Exception(AlbumImgModel::$error_msg);
            }
            Db::commit();
            return true;
        }catch(\Exception $e) {
            self::$error_msg = $e->getMessage();
            Db::rollback();
            return false;
        }
    }

    /**
     * 相册文字编辑
     * @param $album_id
     * @param $title
     * @param $pictures
     * @return bool
     */
    public static function editText($album_id, $title, $pictures) {
        Db::startTrans();
        try {
            // 更新图片
            $res = self::upImgAll($album_id, $pictures);
            if ($res === false) {
                throw new Exception('更新图片失败:' . self::$error_msg);
            }
            // 更新相册
            $data['title'] = $title;
            // 获取第一张图片
            $data['thumb'] = self::getFirstImg($pictures);
            // 更新
            if (!$albumM = AlbumModel::up($album_id, $data)) {
                throw new Exception(AlbumModel::$error_msg);
            }
            Db::commit();
            return true;
        }catch(\Exception $e) {
            self::$error_msg = $e->getMessage();
            Db::rollback();
            return false;
        }
    }

    /**
     * 获取第一张图片
     *
     * @param $pictures
     * @return mixed
     */
    private static function getFirstImg($pictures) {
        array_multisort(array_column($pictures,'sort'),SORT_ASC, $pictures);
        return $pictures[0]['img_url'];
    }

    /**
     * 相册文字编辑更新相片图片
     *
     * @param $album_id
     * @param $pictures
     * @return bool
     * @throws \Exception
     */
    public static function upImgAll($album_id, $pictures){
        $data = [];
        $time = date('Y-m-d H:i:s', time());
        foreach ($pictures as $key => $picture) {
            $data[$key] = $picture;
            $data[$key]['updated_time'] = $time;
            $data[$key]['album_id'] = $album_id;
        }
        $model = new self();
        if(false === $model->saveAll($data)) {
            self::$error_msg = '更新图片失败：'.$model->getError();
            return false;
        }
        return true;
    }
}